#ifndef __VEC2_H__
#define __VEC2_H__

namespace libvec
{
  struct dvec2;
  struct vec3;
  struct mat2;

  struct vec2
  {
    float x, y;

    vec2();
    vec2(dvec2 v);
    vec2(vec3 v);
    vec2(float value);
    vec2(float x, float y);

    float &operator[](int index);

    vec2 operator=(vec2 v);
    vec2 operator=(dvec2 v);
    vec2 operator=(vec3 v);

    bool operator==(vec2 v);
    bool operator!=(vec2 v);

    vec2 &operator+();
    vec2 &operator-();

    vec2 operator+(vec2 v);
    vec2 operator+=(vec2 v);
    vec2 operator-(vec2 v);
    vec2 operator-=(vec2 v);
    vec2 operator*(mat2 m);
    vec2 operator*=(mat2 m);
    vec2 operator*(float scale);
    vec2 operator*=(float scale);
    vec2 operator/(float scale);
    vec2 operator/=(float scale);
  };
}

#endif /* __VEC2_H__ */
